import type { IStorage } from '../types';

// ObjectStorageImpl 实现了 IStorage 接口，使用对象存储键值对
class ObjectStorageImpl implements IStorage {
	/** 内部存储对象，键为字符串，值为字符串 */
	private obj: { [key: string]: string };

	/** 构造函数，初始化内部存储对象 */
	constructor() {
		this.obj = {};
	}

	/**
	 * 设置指定键的值
	 *
	 * @param key 键名，字符串类型
	 * @param value 值，字符串类型
	 * @returns 无返回值
	 */
	setItem(key: string, value: string): void {
		this.obj[key] = value;
	}

	/**
	 * 获取指定键的值
	 *
	 * @param key 键名，字符串类型
	 * @returns 对应的值，若不存在则返回 null
	 */
	getItem(key: string): string | null {
		return key in this.obj ? this.obj[key] : null;
	}

	/**
	 * 移除指定键及其对应的值
	 *
	 * @param key 键名，字符串类型
	 * @returns 无返回值
	 */
	removeItem(key: string): void {
		// const { [key]: _, ...rest } = this.obj;
		// this.obj = { ...rest };

		delete this.obj[key];
	}

	/**
	 * 清空所有存储项
	 *
	 * @returns 无返回值
	 */
	clear(): void {
		this.obj = {};
	}

	/**
	 * 检查指定键是否存在
	 *
	 * @param key 键名，字符串类型
	 * @returns 存在返回 true，否则返回 false
	 */
	keyExists(key: string): boolean {
		return key in this.obj;
	}
}

export default ObjectStorageImpl;
